package com.scmt.hmzd.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.scmt.core.common.utils.ResultUtil;
import com.scmt.core.common.vo.PageVo;
import com.scmt.core.common.vo.Result;
import com.scmt.core.common.vo.SearchVo;
import com.scmt.hmzd.entity.HmUserAddr;
import com.scmt.hmzd.service.IHmUserAddrService;
import com.scmt.hmzd.wxLoginUtils.WxSecurityUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.Date;

@Api(tags = "用户地址信息")
@RestController
@RequestMapping("/scmt/userAddr")
public class AppAddressController {
    @Autowired
    private IHmUserAddrService hmUserAddrService;
    @Autowired
    private WxSecurityUtil securityUtil;

    /**
     * 功能描述：新增用户地址信息数据
     *
     * @param hmUserAddr 实体
     * @return 返回新增结果
     */
    @ApiOperation("新增用户地址信息数据")
    @PostMapping("addHmUserAddr")
    public Result<Object> addHmUserAddr(@RequestBody HmUserAddr hmUserAddr) {
        try {
            hmUserAddr.setUserId(securityUtil.getCurrentWxUser().getId());
            hmUserAddr.setCreateTime(new Date());
            boolean res = hmUserAddrService.save(hmUserAddr);
            if (res) {
                return ResultUtil.data(res, "保存成功");
            } else {
                return ResultUtil.data(res, "保存失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.error("保存异常:" + e.getMessage());
        }
    }


    /**
     * 功能描述：更新数据
     *
     * @param hmUserAddr 实体
     * @return 返回更新结果
     */
    @ApiOperation("更新用户地址信息数据")
    @PostMapping("updateHmUserAddr")
    public Result<Object> updateHmUserAddr(@RequestBody HmUserAddr hmUserAddr) {
        if (hmUserAddr.getAddrId() == null) {
            return ResultUtil.error("参数为空，请联系管理员！！");
        }
        try {
            String userId = securityUtil.getCurrentWxUser().getId();
            if(hmUserAddr.getCommonAddr() == 1) {
                QueryWrapper<HmUserAddr> hmUserAddrQueryWrapper = new QueryWrapper<>();
                hmUserAddrQueryWrapper.lambda().eq(HmUserAddr::getUserId, userId);
                HmUserAddr hmUserAddrUpdate = new HmUserAddr();
                hmUserAddrUpdate.setCommonAddr(0);
                hmUserAddrService.update(hmUserAddrUpdate,hmUserAddrQueryWrapper);
            }
            boolean res = hmUserAddrService.updateById(hmUserAddr);
            if (res) {
                return ResultUtil.data(res, "修改成功");
            } else {
                return ResultUtil.data(res, "修改失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.error("保存异常:" + e.getMessage());
        }
    }


    /**
     * 功能描述：根据主键来删除数据
     *
     * @param id 主键
     * @return 返回删除结果
     */
    @ApiOperation("根据主键来删除用户地址信息数据")
    @PostMapping("deleteHmUserAddr")
    public Result<Object> deleteHmUserAddr(@RequestParam String id) {
        if (StringUtils.isBlank(id)) {
            return ResultUtil.error("参数为空，请联系管理员！！");
        }
        try {
            boolean res = hmUserAddrService.removeById(id);
            if (res) {
                return ResultUtil.data(res, "删除成功");
            } else {
                return ResultUtil.data(res, "删除失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.error("删除异常:" + e.getMessage());
        }
    }


    /**
     * 功能描述：根据主键来获取数据
     *
     * @param id 主键
     * @return 返回获取结果
     */
    @ApiOperation("根据主键来获取用户地址信息数据")
    @GetMapping("getHmUserAddr")
    public Result<Object> getHmUserAddr(@RequestParam(name = "id") String id) {
        if (StringUtils.isBlank(id)) {
            return ResultUtil.error("参数为空，请联系管理员！！");
        }
        try {
            HmUserAddr res = hmUserAddrService.getById(id);
            if (res != null) {
                return ResultUtil.data(res, "查询成功");
            } else {
                return ResultUtil.data(res, "查询失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.error("查询异常:" + e.getMessage());
        }
    }

    /**
     * 功能描述：实现分页查询
     *
     * @param pageVo 分页参数
     * @return 返回获取结果
     */
    @ApiOperation("分页查询用户地址信息数据")
    @GetMapping("queryHmUserAddrList")
    public Result<Object> queryHmUserAddrList(HmUserAddr hmUserAddr, PageVo pageVo) {
        try {
            String userId = securityUtil.getCurrentWxUser().getId();
            hmUserAddr.setUserId(userId);
            IPage<HmUserAddr> result = hmUserAddrService.queryHmUserAddrListByPage(hmUserAddr, null, pageVo);
            return ResultUtil.data(result);
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.error("查询异常:" + e.getMessage());
        }
    }
}
